/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package futbol.tacticas.concursantes.TacticaSantaClara;

import futbol.tacticas.*;
import futbol.tacticas.concursantes.Tactica;

import java.awt.*;
import java.util.*;

/**
 *
 * @author Vicente Belinchón González
 */
public class TacticaSantaClara implements Tactica{
    
    public static String TEXTO_TACTICA_VACIA = "SANTACLARA F.C.";
    private Color color1 = Color.blue;
    private Color color2 = Color.blue;
    private Color colorNumero = Color.white;
    private String texto = TEXTO_TACTICA_VACIA;
    private Point balonTurnoAnterior = new Point();
    private Point balonTurnoSiguiente = new Point();
    
    private int nValores[][]={
      {-140,15,5},  // Jugador 1[0]
      {-110,-15,6},  // Jugador 2[1]
      {-100,0,6},  // Jugador 3[2]
      {-110,-55,6},  // Jugador 4[3]
      {-10,30,6},  // Jugador 5[4]
      {0,-30,6},  // Jugador 6[5]
      {30,50,7},  // Jugador 7[6]
      {40,-50,7},  // Jugador 8[7]
      {60,0,7},  // Jugador 9[8]
      {100,-20,7},  // Jugador 10[9]
      {100,20,10}  // Jugador 11[10]
    };
    public TacticaSantaClara() {
    }
    
    public TacticaSantaClara(String txt, Color c1, Color c2, Color cN){
      color1=c1;
      color2=c2;
      colorNumero=cN;
      texto=txt;
    }

    public Color getColor1() {
      return color1;
    }

    public Color getColor2() {
      return color2;
    }

    public Color getColorNumero() {
      return colorNumero;
    }

    public String getNombre() {
      return texto;
    }

    public int getXInicial(int n) {
      return nValores[n][0];
    }

    public int getYInicial(int n) {
      return nValores[n][1];
    }

    public int getFuerza(int n) {
      return nValores[n][2];
    }
    private Point posicionFutura(Point bola){
      double distanciaRecorridaBalonEjeX = 0;
      double distanciaRecorridaBalonEjeY = 0; 
      double m = 0;
      double n = 0;
        
      m = (bola.getY() - balonTurnoAnterior.getY())/(bola.getX() - balonTurnoAnterior.getX());
      n = bola.getY() - m * bola.getX();
      distanciaRecorridaBalonEjeX = bola.getX() - balonTurnoAnterior.getX();
      distanciaRecorridaBalonEjeY = bola.getY() - balonTurnoAnterior.getY();
      balonTurnoSiguiente.setLocation(bola.getX()+distanciaRecorridaBalonEjeX,bola.getY()+distanciaRecorridaBalonEjeY);
      return balonTurnoSiguiente;
    }

   public Vector<Comando> getComandos(SituacionJugadores sj) {
       Vector<Comando> com=new Vector();
       Point bola=sj.getBola();
       Point contrarios[]=sj.getContrario();
       int jugMasCercano = sj.getMiJugadorMasCerca(bola.getX(), bola.getY());
       bola = posicionFutura(bola);
         //Posicionamiento
        for (int n=0;n<11;n++)
            com.add(new ComandoIrA(n,nValores[n][0],nValores[n][1]));
        
         //Movimiento mas cercano a la bola
        int nJug=sj.getMasCercanoDeBola();
        if (nJug != 0) {
            com.add(new ComandoIrA(nJug,bola.getX(), bola.getY()));
        }
        
        
        //Mejorar defensa
        if (!sj.estoyMasCercaDeBola() || bola.getX()<0){
            for (int n=2;n<9;n++){
                int nJC=sj.getContrarioMasCerca(getXInicial(n), getYInicial(n));
                com.add(new ComandoIrA(n, contrarios[nJC].getX()+10, contrarios[nJC].getY()));
            }
        }
        //Movimiento portero
        int y=(int)(bola.getY()/2);
        if (y<-45) y=-40;
        if (y>45) y=40;
        com.add(new ComandoIrA(0,nValores[0][0], y-15));
        com.add(new ComandoIrA(jugMasCercano, bola.getX() , bola.getY()));
        com.add(new ComandoIrA(1,nValores[0][0], y+15));
        com.add(new ComandoIrA(jugMasCercano, bola.getX() , bola.getY()));
                //	TIRAR A PUERTA
        for (int n=0;n<11;n++){
        	if(n == 0){
        		//	ES EL PORTERO
        		com.add(new ComandoGolpearBola(0,10,-1));     		
        	}else{
        		//	ES UN JUGADOR
                      	  com.add(new ComandoTiroAPuerta(n,0));
        	}
        }
        //	Posicion real de la bola
        balonTurnoAnterior.setLocation(sj.getBola());      
        
       
        return com;
    }

   
}
